#include <stdio.h>
#include <string.h>
//
// Created by hi on 25-5-20.
//指针操作数组
int main() {
    int arr[4] = { 1,2,3,4};
    arr[1] = 12; //直接更改数组内的元素
    int*p = arr; //arr指针赋值给p
    //可以使用指针直接赋值
    p[0] = 0;
    //使用解构符赋值
    *(p+0) = 111;
    for(int i = 0;i < 4;i++) {
        //可以直接使用指针获取值
        printf("%d\n", p[i]);
    }




    printf("--------------------\n");
    const int *arr2 = (int[4]){1, 2, 3, 4}; //创建匿名变量，他返回一个指针
    memcpy(arr,arr2,sizeof(arr)); //将arr2复制给arr,将数组重置为{1,2,3,4}

    p = &arr[2];//将数组中下标2的地址赋值为p(指针偏移)
    *p = 333;//现在改的就是下标为2的元素

    for(int i = 0;i < 4;i++) {
        //因为现在指针偏移在第二个元素，会从第二个元素开始打印，超出的为野指针
        printf("%d\n", *(p+i));
    }
    printf("--------------------\n");
    //将指针变量的起始元素地址归0
    p = &arr[0];
    for(int i = 0;i < 4;i++) {
        //重新打印就是遍历的数组
        printf("%d\n", *(p+i));
    }
    //字符串指针
    char* str = "Hello World";
    while(*str) {
        printf("%c", *(str++));
    }
}